Vergrijzing: de ineenstorting van de economie#
Elias Dekker (14638487), Thien An Pham (14263823) & Vincent Schoonderwoerd (13753002) | G3#
Introductie#
Door stijgende welvaart, is de medische zorg en hygiene in ontwikkelde landen de afgelopen jaren sterk verbeterd. Dat heeft ervoor gezorgd dat mensen steeds ouder worden. Op zich is dat een goede ontwikkeling, maar het geeft ook een probleem, vergrijzing. Vergrijzing betekent dat de gemiddelde leeftijd stijgt, en dat de verhouding tussen ouderen/niet-werkenden veranderd; het aantal ouderen/niet-werkenden neemt toe en het aantal werkenden neemt af.
Dat vormt een probleem voor de maatschappij, want vergrijzing heeft invloed op de arbeidsmarkt, belastinginkomsten, zorgkosten en dus op de economie.
Wij zullen de vergrijzing in Nederland benaderen met behulp van een aantal grafieken en vanuit twee perspectieven die in de volgende alinea’s zijn uitgewerkt.
Perspectief 1:#
Vergrijzing is een probleem op nationaal niveau dat verandering in de samenleving vereist, anders kan de economie hard getroffen worden. Het aantal niet-werkenden stijgt en het aantal werkenden daalt, dus er zijn minder minder mensen om de kosten voor sociale voorzieningen zoals pensioenen en zorgkosten te betalen. Bovendien zijn er meer ouderen waarvoor de zorgkosten en het pensioen betaald moet worden.
Perspectief 2:#
Vergrijzing is een probleem op regionaal niveau. Jonge mensen trekken vanuit het platteland naar de grote steden om daar te studeren en te werken. De ouderen blijven dan achter. Doordat jonge mensen vertrekken, zullen veel voorzieningen onder druk komen te staan. Denk bijvoorbeeld aan winkels die een lagere omzet draaien en er kan niet voldaan worden aan de zorgbehoefte van de overgebleven ouderen in deze krimpregio’s. De arbeidsmarkt en consumentenmarkt zullen dus krimpen in die regio’s, waardoor de economische groei eerst stagneerd en vervolgnes daalt.
Reflectie#
Voor twee grafieken, het aantal 80-plussers in de wlz gefinancierde zorg en de grijze druk, hadden we specifiek om feedback gevraagd tijdens de presentatieronde in het werkcollege.
Wij vonden het twee matig interessante eenlijnsgrafieken en daarom wilden wij graag tips om beide grafieken wat interessanter te maken. Als feedback kregen we de tip dat we beide grafieken konden samenvoegen tot één grafiek, want los waren de grafieken niet interesssant genoeg. Door het samenvoegen is de relatie tussen de toenemende grijze druk en het aantal 80-plussers in de wlz-gefinancierde zorg te zien en voegen beide grafieken wat toe aan onze argumentatie.
Een tweede tip was dat we de gevolgen voor de economie beter als eerste konden laten zien in plaats van als laatste Zo is het probleem meteen duidelijk en is het een betere aandachtstrekker.
Voor de rest vonden de TA en de andere groep dat we goede data hadden en mooie visualisaties.
Dataset en preprocessing#
Show code cell source
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
import matplotlib.pyplot as plt
import json
import ipywidgets as widgets
from ipywidgets import interact, IntSlider
from IPython.display import display
bevolking = pd.read_csv("Bevolking_op_1_januari_en_gemiddeld__geslacht__leeftijd_en_regio_22062023_182818.csv", sep=';')
grijzedruk = pd.read_csv('grijs.csv', sep=';')
zorgkosten = pd.read_csv('zorgkosten.csv', sep=';')
uitkeringen = pd.read_csv('Uitkeringen_draft.csv', sep=";")
Provinciale_regionalegroei = pd.read_csv('Provinciale_regionalegroei_draft.csv', sep=';')
Regionale_grijzedruk = pd.read_csv('Corop_grijzedruk_2019.csv', sep=';')
Regionale_economischegroei = pd.read_csv('Corop_economischegroei_2019.csv', sep=";")
levensverwachting = pd.read_csv("Levensverwachting.csv", sep=';',decimal=',')
bevolking = bevolking[bevolking['Leeftijd'] != 'Totaal']
bevolking = bevolking[bevolking["Leeftijd"].str.contains("jaar of ouder") == False]
uitkeringen = uitkeringen.drop(columns=["ID"])
Provinciale_regionalegroei = Provinciale_regionalegroei.drop(columns=["ID"])
result = pd.concat([bevolking, grijzedruk,zorgkosten,uitkeringen, Provinciale_regionalegroei,Regionale_grijzedruk,Regionale_economischegroei,levensverwachting], ignore_index=True, sort=False)
result['RegioS'] = result['RegioS'].str.strip()
result['Perioden'] = result['Perioden'].str[:4]
result['Jaar']=result['Jaar'].str[:4]
result['SocialeUitkeringen_1'] = result['SocialeUitkeringen_1']/1000
Om de opgeschoonde dataset te vormen, hebben we 8 dataset bestanden van het CBS gebruikt. De datasets van het CBS kunnen op de site al op onderwerp (variabelen) , regio en perioden selecteerd worden. De variabelen die we gebruiken zijn, type uitkering en besteding aan dat type tussen 1995 tot en met 2021, procent grijze druk per gemeente in 2020 en verandering van bbp per provincie tussen 1995 tot en met 2021, bevolkingsopbouw en zorgkosten voor 80-plussers. De datasets worden opgeschoond door de volgende operaties, puntkomma’s vervangen door komma’s, alle spaties verwijderen en de variable van jaar veranderen (bijv. “2010JJ00” veranderen naar “2010”). Bij levenverwachting worden de komma’s van de getallen vervangen door punten. De verschillende datasets worden dan samengevoegd om één dataframe te vormen.
Work distribution#
Perspectief 1:#
Show code cell source
bevolking_mannen = bevolking[['Perioden', 'Leeftijd', 'Mannen']]
bevolking_vrouwen = bevolking[['Perioden', 'Leeftijd', 'Vrouwen']]
bevolking_mannen = bevolking_mannen[bevolking_mannen['Mannen'] != '.']
bevolking_vrouwen = bevolking_vrouwen[bevolking_vrouwen['Vrouwen'] != '.']
bevolking_mannen['Mannen'] = pd.to_numeric(bevolking_mannen['Mannen'])
bevolking_vrouwen['Vrouwen'] = pd.to_numeric(bevolking_vrouwen['Vrouwen'])
bevolking_mannen['Mannen'] = - bevolking_mannen['Mannen']
fig = go.Figure()
num_steps = 36
for step in bevolking['Perioden'].unique():
fig.add_trace(go.Bar(visible=False, y=bevolking_mannen[bevolking_mannen['Perioden'] == step]['Leeftijd'], x=bevolking_mannen[bevolking_mannen['Perioden'] == step]['Mannen'], orientation='h', name='Mannen'))
for step in bevolking['Perioden'].unique():
fig.add_trace(go.Bar(visible=False, y=bevolking_vrouwen[bevolking_vrouwen['Perioden'] == step]['Leeftijd'], x=bevolking_vrouwen[bevolking_vrouwen['Perioden'] == step]['Vrouwen'], orientation='h', name='Vrouwen'))
fig.data[0].visible = True
fig.data[36].visible = True
steps = []
for i in range(num_steps):
step = dict(
method="update",
args=[{"visible": [False] * len(fig.data)},
{"title": "Bevolkingspiramide: " + str(i + 1988)}],
label=str(i + 1988))
step["args"][0]["visible"][i] = True
step["args"][0]["visible"][i + num_steps] = True
steps.append(step)
sliders = [dict(
active=1,
currentvalue={"prefix": "Jaar: "},
steps=steps
)]
fig.update_layout(title = 'Bevolkingspiramide: 1988',
sliders=sliders,
xaxis = dict(tickvals = [-100000, -50000,
0, 50000, 100000],
ticktext = ['100000', '50000',
'0', '50000', '100000'])
)
fig.show()
Figuur 1: Deze bevolkingspiramide visualiseert de verdeling van de bevolking op basis van leeftijd en geslacht in Nederland, de demografische structuur. De x-as toont het aantal mensen. De y-as bevat de leeftijdsgroepen. Er is een slider aanwezig waarmee het jaartal van de bevolkingspiramide kan worden aangepast. De breedte van elke staaf vertegenwoordigt de grootte van iedere leeftijdsgroep. Deze grafiek biedt belangrijke inzichten in de leeftijdsopbouw van de bevolking, waarbij ook ontwikkelingen zoals vergrijzing.
Er is dus een kleinere groep mensen die later de zorg van een grote groep ouderen betalen.
Er is een grote groep mensen die tussen de 40 en de 65. De groep tussen 0 en 20 is kleiner. Deze kleinere groep moet de grotere groep over 20 jaar vervangen.
Show code cell source
Totaal = go.Scatter(
x=levensverwachting['Jaar'],
y=levensverwachting['Totaal mannen en vrouwen'],
mode='lines',
name='Totaal mannen en vrouwen'
)
Mannen = go.Scatter(
x=levensverwachting['Jaar'],
y=levensverwachting['Mannen'],
mode='lines',
name='Mannen'
)
Vrouwen = go.Scatter(
x=levensverwachting['Jaar'],
y=levensverwachting['Vrouwen'],
mode='lines',
name='Vrouwen'
)
layout = go.Layout(
title='Levensverwachting in Nederland',
xaxis=dict(title='Fig. 2. De levensverwachting van mannen en vrouwen tussen 1950 tot en met 2022'),
yaxis=dict(title='Levensverwachting (jaren)'),
hovermode='x unified'
)
fig = go.Figure(data=[Totaal, Mannen, Vrouwen], layout=layout)
fig.show()
Doordat de levensverwachting stijgt zal de groep van ouderen nog groter worden.
Sinds 1972 stijgt de levensverwachting bijna elk jaar. In combinatie met de vorige grafiek is te zien dat de groep van ouderen in de toekomst erg groot zal zijn.
De groep werkende krimpt moet steeds een groter groep oudere onderhouden.
Sinds 1995 stijgt de grijze druk. Dat betekent dat het verschil in grootte tussen de groep niet-werkenden en werkenden steeds groter wordt.
Show code cell source
from plotly.subplots import make_subplots
df_zorgkosten = pd.read_csv('zorgkosten.csv', sep=';')
df_zorgkosten.loc[:, 'Jaar'] = df_zorgkosten['Jaar'].str[:4]
df_zorgkosten.loc[:, 'Jaar'] = pd.to_numeric(df_zorgkosten['Jaar'].str[:4])
df_grijs = pd.read_csv('grijs.csv', sep=';')
df_unique = df_grijs.drop_duplicates(subset="Jaar", keep="first")
df_unique.loc[:, 'Jaar'] = pd.to_numeric(df_unique['Jaar'].str[:4])
df_unique.loc[:, 'Grijze Druk'] = df_unique['Grijze Druk'] / 100
plot = make_subplots(specs=[[{"secondary_y": True}]])
plot.add_trace(
go.Scatter(
x=df_unique['Jaar'],
y=df_unique['Grijze Druk'],
name='Grijze druk',
mode='lines',
line=dict(color='green', width=2),
),
secondary_y=True,
)
plot.add_trace(
go.Scatter(
x=df_zorgkosten['Jaar'],
y=df_zorgkosten['80-plussers'],
name='Aantal 80-plussers in de Wiz/AWBZ-gefinancierde zorg',
mode='lines',
line=dict(color='red', width=2),
),
secondary_y=False,
)
plot.update_layout(
title='Grijze druk & aantal 80-plussers in de Wlz',
xaxis=dict(title='Jaren', range=['2002', '2022'], dtick=1),
yaxis=dict(title='Aantal'),
yaxis2=dict(title='Grijze druk', overlaying='y', side='right', tickformat='.0%'),
showlegend=True,
height=600,
hovermode='x unified'
)
plot.show()
Figuur 3: De x-as toont de jaartallen 1995 t/m 2022. Er zijn twee y-assen. De rechter y-as hoort bij de grijze druk en is in procenten. De linker y-as hoort bij het aantal 80-plussers in de Wet Landurige Zorg (WLZ) en is in absolute aantallen. In de grafiek is de ontwikkeling te zien van de grijze druk en van het aantal 80-plussers dat is de WLZ zit over de jaren heen.
Door de vergijzing neemt het aantal ouderen met chronische aandoeningen en multimorbiteit toe, dat zal leiden tot meer ouderen in de WLZ en dat zal weer leiden tot hogere premies en belastingen.
De grijze druk is de verhouding tussen het aantal 65-plussersen het aantal mensen van 20-64 jaa. De grijze druk is gestegen van 22% in 2002 naar 34% in 2023. Er is nog geen data bekend voor de jaren na 2023, maar het CBS heeft voorspeld dat de toename na 2023 doorzet met een piek in 2040 met een grijze druk van 43%. Na de piek zal er een kleine afname zijn omdat de baby boomers dan overleden zijn. Echter deze afname is minimaal en rond 2060 zal de grijze druk weer toenemen met dezelfde snelheid als voorheen.
Door de toenemende vergrijzing, zal ook het aantal ouderen met chronische aandoeningen, zowel fysiek als mentaal, toenemen. Met name dementie zal zorgen voor veel sterfte en een hoge ziektelast. Ook zal het aantal ouderen met multimorbiteit toenemen (meerdere aandoeningen tegelijk) en daardoor ook de vraag naar complexere zorg. Daarnaast hebben ouderen een grotere kan op vallen, gezichtsstoornissen en incontinentie wat ook kan leiden tot behoefte aan zorg.
De Wet Landurige Zorg (WLZ), voorheen Algemene Wet Bijzondere Ziektekosten (AWBZ), regelt intensieve zorg voor onder andere kwetsbare ouderen. De eerdergenoemde zaken maken ouderen kwetsbaar, wat zal resulteren in een toename van ouderen in de WLZ. Iedereen in Nederland betaalt via premies en belastingen mee aan de WLZ. Het grootste deel van de 65-plussers werkt niet. Door de vergrijzing, worden er steeds meer zorgkosten gemaakt, en zijn er in verhouding steeds minder mensen die voor geld zorgen. Dat zal leiden tot hogere premies en belastingen.
De zorg voor ouderen wordt steeds duurder.
Sinds 2001 stijgt het aantal ouderen dat zorg ontvangt, gefinancieerd door Wiz/AMBZ.
Show code cell source
totaal = ['T001397']
totaal = result[result['Uitkeringen'].isin(totaal)]
aow = ['A045116']
aow = result[result['Uitkeringen'].isin(aow)]
ouderen = ['A045119', 'A045137', 'A045121']
ouderen = result[result['Uitkeringen'].isin(ouderen)]
zorgwetten=ouderen.groupby('Perioden')['SocialeUitkeringen_1'].sum()
zorgwetten=zorgwetten.reset_index()
selected_data = totaal.loc[totaal['Uitkeringen'] == 'T001397']
fig = go.Figure()
fig.add_trace(go.Scatter(x=selected_data['Perioden'], y=selected_data['SocialeUitkeringen_1'], mode='lines', fill='tonexty',stackgroup='one', name="Totale uitkeringen"))
fig.add_trace(go.Scatter(x=aow['Perioden'], y=aow['SocialeUitkeringen_1'], mode='lines', fill='tonexty',stackgroup='two', name="Pensioen"))
fig.add_trace(go.Scatter(x=zorgwetten['Perioden'], y=zorgwetten['SocialeUitkeringen_1'], mode='lines', fill='tonexty', stackgroup='two', name="Zorgwetten"))
fig.update_layout(
title="Besteding aan uitkeringen",
yaxis_title="Uitkering (Miljard)",
xaxis_title="Fig. 5. De verhouding tussen de uitkering die ouderen krijgen en de hoeveelheid")
fig.show()
Figuur 4: De x-as toont de jaartallen 1995 t/m 2022. De y-as toont de hoeveelheid euro de overheid uitgeeft aan uitkeringen in miljarden. Er is te zien dat er in 2006 en 2016 er door zorgwetten meer geld naar ouderen gingen. Daardoor wordt het aandeel van uitkeringen dat naar ouderen gaan steeds groter.
Er gaat steeds meer geld naar de ouderen.
Door zorgenwetten wordt het aandeel van uitkeringen dat naar ouderen gaat steeds groter.
Perspectief 2:
Show code cell source
corop = json.load(open('coropgebied_gegeneraliseerd_2021.geojson', 'r'))
for feature in corop['features']:
feature['id'] = feature['properties']['statcode']
fig = px.choropleth(result, locations='RegioS', geojson=corop, color='GrijzeDruk_24')
fig.update_geos(fitbounds="locations", visible=False)
fig.update_layout(
title="Regionale grijze druk",
annotations = [dict(xref='paper',
yref='paper',
x=0.5, y=-0.2,
showarrow=False,
text ='Fig. 6. Van elke COROP-gebied is de grijze druk weergegeven. Dit is de verhouding tussen het aantal personen van 65 jaar of ouder ten opzichte van de personen in de zogenaamde "productieve" leeftijdsgroep van 20 tot 65 jaar. In de grafiek is er te zien dat gebieden aan de randen van Nederland, zoals Zeeuwsch-Vlaanderen en Oost-Groningen, een hogere grijze druk hebben dan gebieden in de randstad, zoals Amsterdam en Utrecht.')])
fig.show()
Figuur 5: Van elke COROP-gebied is de grijze druk weergegeven. Dit is de verhouding tussen het aantal personen van 65 jaar of ouder ten opzichte van de personen in de zogenaamde “productieve” leeftijdsgroep van 20 tot 65 jaar. In de grafiek is er te zien dat gebieden aan de randen van Nederland, zoals Zeeuwsch-Vlaanderen en Oost-Groningen, een hogere grijze druk hebben dan gebieden in de randstad, zoals Amsterdam en Utrecht.
Er is meer grijze druk in de randen van Nederland.
De grijze druk is hoger in het zuiden van Zeeland dan in de regio van Amsterdam.
Show code cell source
fig2 = px.choropleth(result, locations='RegioS', geojson=corop, color='BbpVolumemutaties_3')
fig2.update_geos(fitbounds="locations", visible=False)
fig2.update_layout(
title="Regionale economische groei")
fig2.show()
Figuur 6: Van elke COROP-gebied is de volumegroei van het bruto binnenlands product (bbp) weergegeven. Het bbp is een maat voor de omvang van de economie en de volumeverandering is ten op zichte van 2018. In de grafiek is er te zien dat gebieden aan de randen van Nederland, zoals Zeeuwsch-Vlaanderen en Oost-Groningen, economisch krimpen en dat de gebieden in de randstad, zoals Amsterdam en Utrecht, economisch groeien.
De regionale grijze druk beïnvloed de regionale economische groei.
Het zuiden heeft een lagere economische groei dan de regio van Amsterdam. In combinatie met de vorige grafiek is te zien dat de tint van deze verschillen.
Show code cell source
randstad_provincies = ['PV26', 'PV27', 'PV28']
randstad_provincies = result[result['RegioS'].isin(randstad_provincies)]
de_rest = ['PV20', 'PV21', 'PV22', 'PV23', 'PV25', 'PV29', 'PV31']
de_rest = result[result['RegioS'].isin(de_rest)]
randstad_provincies=randstad_provincies.groupby('Perioden')['BbpVolumemutaties_3'].mean()
randstad_provincies=randstad_provincies.reset_index()
de_rest=de_rest.groupby('Perioden')['BbpVolumemutaties_3'].mean()
de_rest=de_rest.reset_index()
fig = go.Figure()
fig.add_trace(go.Scatter(x=randstad_provincies['Perioden'], y=randstad_provincies['BbpVolumemutaties_3'], mode='lines', name="randstad"))
fig.add_trace(go.Scatter(x=de_rest['Perioden'], y=de_rest['BbpVolumemutaties_3'], mode='lines', name="de rest"))
fig.update_layout(
title="Verandering van bbp",
xaxis_title="Jaren",
hovermode='x unified')
fig.show()
Figuur 7: De x-as toont de jaartallen 1995 t/m 2021. De y-as toont de volumegroei van het bbp in procenten. Er is te zien dat tussen 2012 en 2019 de provincies met randstad gebieden, zoals Noord-Holland en Utrecht, een hogere volumegroei hebben dan de provincies zonder randstad gebieden, zoals Zeeland en Drenthe.
De randstad heeft minder last van grijze druk dan de rest van Nederland.
In de grafiek van regionale vergrijzing is te zien dat de randstand minder vergrijzing ervaart dan de rest van Nederland. In deze grafiek is te zien dat (zonder te kijken naar 2008-2009 (Kredietcrisis) en 2019-2021 (COVID-19)) er tussen 2012 en 2019 de economische groei van de randstad hoger is dan van de rest van Nederland.